《吊打分析师》实战—我要租个好房
2020,努力做一个无可替代的人!
长文多图,建议先收藏再看
作者|小一
全文共7948字,阅读全文需18分钟
写在前面的话
小一使用的Python版本是3.8
开发环境是Pycharm2019.3
图形可视化使用matplotlib + seaborn + echarts
正文
文章会对深圳整体、各区域的租房价格、房屋属性等多个维度进行分析
也会对深圳的租房价格洼地、热点区域分布等进行相关探索
提出问题&问题分析
数据预处理
可视化分析与探索
一、提出问题&问题分析
city: 城市
house_id:房源编号
house_rental_method:房租出租方式:整租/合租/不限
house_address:房屋地址:城市/行政区/小区/地址
house_longitude:经度
house_latitude:纬度
house_layout:房屋户型
house_rental_area:房屋出租面积
house_rental_price:房屋出租价格
house_update_time:房源维护时间
house_orientation:房屋朝向
house_tag:房屋标签
house_floor:房屋楼层
house_elevator:是否有电梯
house_parking:房屋车位
house_water:房屋用水
house_electricity:房屋用电
house_gas:房屋燃气
house_heating:房屋采暖
create_time:创建时间
house_note:房屋备注
1.1、数据特征分析
到这你可能会有疑问了,为什么先进行这个步骤?
在我们上面的22个特征中,会存在一些主要特征
出租方式(整租 or 合租)
地址(行政区-区域-小区名)
经纬度(房源经纬度数据)
格局(x室x厅x卫)
面积(xx m²)
价格(xxxx元/月)
房源编号是房子的唯一标识,我们用小区名可以替代 深圳是沿海城市,暖气这个词似乎很遥远 创建时间没有可对比性
1.2、提出问题
重头戏来啦,我们需要解决的问题是什么?
嗯!也就是文章的标题,我要租个好房
1.3、问题分析
自己提的问题流着泪也要想出解决方法
深圳整体房源出租方式比例是什么样的?
深圳的房源数量分布是什么样的?
房租价格分布呢?
价格相对便宜的房源分布在哪些区域?
这些区域的房租、房源数据分布?
二、数据预处理
终于到了预处理这一步,前面学习的Pandas、NumPy 都能派上用场了,是不是有点小激动?
数据统计、分布情况
找出缺失数据,选用合适的方法处理
找出异常数据,选用合适的方法处理
数据合并重塑
等一下,经纬度只有一条空数据,是不是可以先处理一下?
df_data.loc[df_data.house_longitude.isnull(), 'house_longitude'] = 114.018609
df_data.loc[df_data.house_latitude.isnull(), 'house_latitude'] = 22.604297
我们在提出问题的时候已经分析过可以删除的原因
df_data.drop(columns=['city', 'house_id', 'house_update_time', 'create_time', 'house_heating', 'house_note'],
axis=1, inplace=True
)
2. 地址中的:可以划分为行政区+区域+详细地址【需要处理】
3. 经度&纬度:应该是float 类型,如果不是的话转换一下即可 【需要处理】
4. 户型:标准应该是xx室xx厅xx卫,如果不是的话进行合理处理 【需要处理】
5. 出租面积:应该是一个float 类型的数值,如果再严格点应该是int 类型 【需要处理】
6. 出租价格:应该是int 类型的数值 【需要处理】
7. 房屋标签:官方核验、近地铁、精装等标签都比较有用 【需要处理】
8. 所在楼层:高中低+楼层 【需要处理】
9. 是否有电梯:是|否 【需要处理】
10. 用水、用电:民水民电和商水商电,这两个字段可以确定小区的性质 【需要处理】
11. 提供车位:感觉无关紧要,先放着 【暂不处理】
12. 房屋燃气:感觉无关紧要,先放着 【暂不处理】
开始清洗数据
等等,如果地址为空呢?刚好是 "--" 的这种形式呢?
如果说这个字段不是主要字段,或者我们没有能力去填充它,那可能删了就删了。
df_data['station'] = df_data['house_address'].apply(lambda str: str.split('-')[0])
df_data['area'] = df_data['house_address'].apply(lambda str: str.split('-')[1])
df_data['address'] = df_data['house_address'].apply(lambda str: str.split('-')[2])
通过小区名查询到区域不为空的同名小区
使用同名小区的区域数据进行填充
df_data.loc[df_data.id == 10909, 'area'] = '西丽'
# 验证户型格式
df_data['house_layout'].map(lambda str: re.findall(r'^\d+室\d厅\d卫', str)[0]).shape[0]
(房屋性质这个欢迎补充,这个领域小一真不了解,补课也没查到多少,555)
到此,我们的重头戏算是落下帷幕了
你会发现,数据清洗的过程就是一个不断的去寻找方法验证数据、填充数据的过程。
读到这,请思考一个问题,我们的数据现在一定是对的吗?
三、可视化分析探索
异常数据的检查与处理
单特征对房租价格的影响
多个特征下房租价格的分布情况
热力图探索地铁路线
对,你没看错,通过可视化进行异常数据的检查
这个值,怎么说呢,要不就是小一见识短,要不就是数据还有异常值。
你怎么看?
3.1、异常数据检查与处理
可视化的代码有点多,需要的同学直接拉文末获取源码
合租的房屋里面有整租的房屋,同理,整租的应该也有合租的。
异常数据找到了,怎么纠正呢?总不能直接删掉吧
首先,通过房屋面积去进行过滤,大于45㎡
其次,通过价钱进行过滤,大于4500元
接着,通过房屋户型进行过滤,非一居室的
整合起来就是:面积大于45㎡、房租超过4500元、户型是两室及以上,注意是合租房!合租房!合租房!基本都应该是整租房
大
概确定了价钱低于3800、面积超过55㎡的非一室的整租房基本都是合租房
接下来,到了看图时间,多图预警 ☟☟☟
3.2、单特征的可视化
深圳市的整租房源较多,占比77.34%远高于合租的22.66%
房源的楼层高度分布很均匀,竟然有0.01% 的地下室出租
有电梯的房源占比较多,为78.98%
有3.85%的房屋提供免费车位
提供燃气的房屋占比90.60%
普通住宅的占比86.45%
咦,竟然有一个13个卧室的房屋,小一我又好奇了,走,一起去看看
选取价格小于15000/月的数据
选取价格小于4000/月的数据
小总结:
可以初步确定:便宜的房源->龙岗区最佳、龙华次之;不在乎价格的话优选福田、南山
3.3、多特征的可视化
记住我们的最终目标:确定价值洼地
我们把整租的房价选取价格调低至小于12000/月的数据,合租房的房价调低至3800/月 以下区域同此标准
深圳有一个关内关外的概念,关内指的是市中心的几个行政区。
小总结:
你以为这就完了?当然没有,上面一大堆推荐区域,到底选哪啊?
我们想要的价值洼地一定是单价低、地段好的区域
3.4、热力图探索
首先需要对数据进行处理,筛选出上面表中的区域
然后对每个区域计算房屋单价,取单价的倒数作为权重
最后根据百度热力图,进行可视化展示,确定价值洼地
df_data_area = df_data.loc[(df_data.area.isin(area)) &
(df_data.house_rental_method == type) &
(df_data.house_rental_price < max_price),
['house_rental_price', 'house_rental_area', 'house_longitude', 'house_latitude']]
# 计算每平米的房屋价值当做权重
df_data_area['weight'] = 1.0/df_data_area['house_rental_price']/df_data_area['house_rental_area']
这一步需要将数据改成热力图需要的格式:经度+维度+权重
这一步需要注意,因为爬取到的房屋经纬度是基于百度坐标系,这样用百度地图作可视化底图是不需要进行经纬度转换的
因为Echarts的配色去显示全市的数据会让人更加不适(主要是饿),这里用Excel 的三维地图进行可视化
注意注意,灵魂画家上线了
很不情愿的承认这个想法失败了
利用房屋标签中的近地铁字段
设置房租上限,降低较大值的影响
深圳的地铁太密集了,要不换个城市?(手动狗头)
来看一下这一部分的小总结:
通过区域的房源数量和价格分布确定了优选区域
通过探索确定了每个优选区域的价值洼地,并给出了地图展示
探索深圳的地铁路线图
总结一下:
在分析过程中,需要注意几个细节::
围绕问题有针对性、目的性的展开分析
数据清洗过程中,对于主要字段用正确的方式区填充,而不是删除
数据可视化可以再次验证数据的异常值
本次项目中,还存在以下问题待改进:
对于整租、合租的异常数据处理需要更详细的方法
数据量较少,需要定期爬取数据进行更新
针对区域进行聚类,比如住宅区、商业区,进行网络针对性优化(开头提出的第三个问题)
同样的,针对本次项目,我们还可以在后期探索以下问题:
对比一线城市深圳,猜想二线城市的数据分布应该是什么样的?
如果对房租进行预测,如何选择特征,怎么去建模?
关于源码
公众号后台
回复 租个好房
获取 本节内容的源码写在后面的话
对,这是在强行解释周四没发文章
碎碎念一下
记得三连支持一下小一,后面我会继续分享更多的实战项目。 后面如果没有按时推文章,那一定是在攒一个大大的干货 好了,我们下节见!
好巧啊,你也读到这了!
点个
在看
让小一看到你